//下拉刷新

typedef enum {
    Refresh_req,                // 刷新
    LoadMore_req,               // 更多
    GetCache_req,               // 加载缓存
    RefreshAfterCache_req,      // 先加载缓存，再刷新
    GetNew_req                  // 自动刷新时，获取最新的数据
} RequestType;

#import <UIKit/UIKit.h>
#import "PullTableView.h"
#import "UIScrollView+SVInfiniteScrolling.h"

@protocol PullTableViewDelegate <NSObject>

@required
/**
 *  是否需要加载更多控件，默认YES
 */
- (BOOL)needLoadMoreView;

/**
 *  是否需要加载刷新控件，默认YES
 */
- (BOOL)needRefreshView;

/**
 *  网络请求
 *
 *  @param void 请求类型（刷新，更多，自动刷新）
 *
 *  @return 无
 */
- (void)loadData:(RequestType)requestType;
@end

@interface PullTableView : UITableView

@property(weak, nonatomic) id<PullTableViewDelegate> pullDelegate;

/**
 *  是否需要加载“刷新”“更多”的协议
 */
- (void)addRefreshAndLoadMore;

#pragma mark-   外部调用
- (void)removeRefreshView;
- (void)setPullDelegeteToNil;
/**
 *  设置是否还有更多数据
 *
 *  @param hasMore 是否存在更多
 */
- (void)setHasMore:(BOOL)hasMore;

/**
 *  刷新完成后调用, 关闭刷新控件
 */
- (void)didRefreshFinished;

/**
 *  加载失败调用此方法，
 *@param  isFirstRequest  第一次加载就失败，会隐藏加载状态view，你可自行定义出错界面
 *                        不是第一次loadmore失败，会恢复成‘加载更多’状态
 */
- (void)didLoadMoreFinishedErrorWithFirst:(BOOL)isFirstRequest;


#pragma mark-   内部调用，外部不用关心
- (void)addRefreshViewControl;
- (void)addInfiniteScrolling;

@end
